package com.eian.boot.metrics.annotation;

import java.lang.annotation.*;

/**
 * 性能监控注解
 * 用于标记需要进行性能监控的方法或类
 *
 * @author alex.meng
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PerformanceMonitor {

    /**
     * 监控名称，用于标识监控项
     * 默认使用类名.方法名
     */
    String value() default "";

    /**
     * 监控描述
     */
    String description() default "";

    /**
     * 是否启用监控
     * 默认启用，可通过此参数临时关闭某个方法的监控
     */
    boolean enabled() default true;

    /**
     * 慢方法阈值（毫秒）
     * 超过此阈值的方法执行将被标记为慢方法
     * -1表示使用全局配置
     */
    long slowThreshold() default -1;

    /**
     * 是否记录方法参数
     * 注意：记录参数可能影响性能，谨慎使用
     */
    boolean recordArgs() default false;

    /**
     * 是否记录返回值
     * 注意：记录返回值可能影响性能，谨慎使用
     */
    boolean recordResult() default false;

    /**
     * 业务标签，用于分类统计
     */
    String[] tags() default {};

    /**
     * 采样率（0.0-1.0）
     * 1.0表示100%采样，0.5表示50%采样
     * -1表示使用全局配置
     */
    double sampleRate() default -1.0;
}
